package com.jt.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.logging.Level;

@Service
public class ItemCatServiceImpl implements ItemCatService{
    @Autowired
    private ItemCatMapper itemCatMapper;

    @Override
    public List<ItemCat> findItemCatList(Integer level) {
        System.out.println(level);
            Map<Integer,List<ItemCat>>map=getMap();
            if(level==1){
            return map.get(1);
            }
            if(level==2){
                return getTwoList(map);
            }
        return getThreeLis(map);
    }



    public Map<Integer,List<ItemCat>> getMap(){
    //1.查询全部数据库记录
    List<ItemCat> list = itemCatMapper.selectList(null);
    //2.将list几何数据封装到Map集合中
    Map<Integer,List<ItemCat>>map=new HashMap<>();
    for(ItemCat itemCat :list){//遍历所有数据
        int parentId=itemCat.getParentId();
        if(map.containsKey(parentId)){//key存在,将数据追加即可
            map.get(parentId).add(itemCat);

    }else {//key不存在 我是当前parentId的第一个子集
            List<ItemCat> temp = new ArrayList<>();
            temp.add(itemCat);
            map.put(parentId, temp);
        }

}
    return map;
}

    private List<ItemCat> getTwoList(Map<Integer,List<ItemCat>> map){
        //获取一级菜单
        List<ItemCat>oneList=map.get(0);
        //遍历数据
        for(ItemCat oneItemCat :oneList){
            int parentId=oneItemCat.getId();
            //根据父集查询子集
            List<ItemCat> twoList = map.get(parentId);
            oneItemCat.setChildren(twoList);

        }


return oneList;

    }
    /**
     * 获取一级/二级/三级数据
     */
    private List<ItemCat>getThreeLis(Map<Integer,List<ItemCat>> map){
        //1.获取一级和二级
        List<ItemCat> oneList=getTwoList(map);
        //2.遍历一级集合获取二级数据
            for (ItemCat  oneItemCat :oneList){
                //二级数据可能为空
               List<ItemCat>twoList= oneItemCat.getChildren();
               if(twoList==null || twoList.size()==0){
                    continue;
               }
            for( ItemCat twoItemCat:twoList){
                int parentId=twoItemCat.getId();
                List<ItemCat> threeList = map.get(parentId);
                twoItemCat.setChildren(threeList);

            }

            }
return oneList;
    }

 /*   @Override
    public List<ItemCat> findItemCatList(Integer level) {
        QueryWrapper<ItemCat>queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id", 0);
        List<ItemCat> onelist=itemCatMapper.selectList(queryWrapper);
        for(ItemCat oneItemCat: onelist){
            queryWrapper.clear();
            queryWrapper.eq("parent_id", oneItemCat.getId());
            List<ItemCat>twolist=itemCatMapper.selectList(queryWrapper);
            for(ItemCat twoItemCat:twolist){
                queryWrapper.clear();
                queryWrapper.eq("parent_id",twoItemCat.getId());
                List<ItemCat> threeItem=  itemCatMapper.selectList(queryWrapper);
                 twoItemCat.setChildren(threeItem);
            }
            oneItemCat.setChildren(twolist);
        }
        return onelist;
    }*/
 @Override
 public void status(ItemCat itemCat) {
     itemCatMapper.updateById(itemCat);



 }

    @Override
    public void updateItemCat(ItemCat itemCat) {

     itemCatMapper.updateById(itemCat);
    }

    @Override
    public void saveItemCat(ItemCat itemCat) {
    itemCat.setStatus(true);
    itemCatMapper.insert(itemCat);
    }

    @Override
    public void deleteItemCat(ItemCat itemCat) {
    if (itemCat.getLevel()==3){

        itemCatMapper.deleteById(itemCat.getId());
    }
    if(itemCat.getLevel()==2){
        int parentId=itemCat.getId();
        QueryWrapper<ItemCat>queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id", parentId)
                .or()
                .eq("id", itemCat.getId());
        itemCatMapper.delete(queryWrapper);
        //3.完成三级菜单的删除  核心是二级菜单

        }
            if(itemCat.getLevel()==1){
            int oneId=itemCat.getId();
            QueryWrapper<ItemCat>queryWrapper =new QueryWrapper<>();
            queryWrapper.eq("parent_id", oneId);
            List twoId = itemCatMapper.selectObjs(queryWrapper);
            queryWrapper.clear();
            queryWrapper.in(twoId!=null && twoId.size()>0,"parent_id",twoId)
                    .or()
                    .in(twoId!=null && twoId.size()>0,"id", twoId)
                    .or()
                    .eq("id", oneId);
            itemCatMapper.delete(queryWrapper);

    }


}
}
